laravel有提供我們ORM(object-relational mapper),讓我們可以利用Model來跟 DB做互動。
我們今天的目標就是利用Eloquent來改寫登入跟註冊。
首先我們要先創建一個User的Model,但預設laravel裡就有個User model所以我們先把它刪了。
接著輸入指令
php artisan make:model User
好了!創建好我們就可以使用囉
來改一下登入的寫法,我們可以在controller中另寫一個方法
class LoginController extends Controller
{
public function login(Request $request){
$account = $request->input('account');
$password = $request->input('password');
$user = DB::table('users')->where('account', '=', $account)
->first();
if(Hash::check($password, $user->password)){
return "你好,我的帳號是".$request->input('account');
}
return Redirect::back()->withErrors(['帳號或密碼錯誤']);
}
public function loginWithORM(Request $request){
$account = $request->input('account');
$password = $request->input('password');
$user = User::query()
->where('account', $account)
->first();
if(Hash::check($password, $user->password)){
return "你好,我的帳號是".$user->account;
}
return Redirect::back()->withErrors(['帳號或密碼錯誤']);
}
}
記得修改下route
Route::post('/login', [LoginController::class, 'loginWithORM']);
試試看可不可行,登入看看吧~我這邊可以
再來我們可以去改改註冊
public function handle()
{
$account = $this->argument('account');
$password = $this->argument('password');
$username = $this->argument('username');
$validator = Validator::make(['password' => $password], [
'password' => 'regex:' . SignUp::PASSWORD_REGEX
]);
if ($validator->fails()) {
$this->error("密碼需要6位數以上,並且至少包含大寫字母、小寫字母、數字、符號各一");
return 1;
}
$user = User::where('account', $account)->first();
// $user = DB::table('users')->where('account', $account)->first();
if($user !== null){
$this->error("帳號重複註冊");
return 1;
}
User::create([
'account' => $account,
'password' => Hash::make($password),
'name' => $username
]);
// DB::table('users')->insert([
// 'account' => $account,
// 'password' => Hash::make($password),
// 'name' => $username
// ]);
$this->line("帳號註冊成功");
return 0;
}
但若你要可以在你的Model上create資料,必須加上這行
protected $guarded = [];
也試著再註冊一筆資料,並登入吧!
今天我們的實作成功!把登入跟註冊改以ORM實作了。期待明天的到來唷!